<?php
/**
 * Created by PhpStorm.
 * User: wudiying
 * Date: 2018/11/19
 * Time: 下午10:26
 */

// 整个所有代码的根目录
define('BASEDIR', __DIR__);

// 先把自动加载的方法先引入进来，然后下面开始调用；
include BASEDIR . '/IMooc/Loader.php';

//require 'IMooc/Object.php';
//require 'App\Controller\Home\Index.php';
// 防止代码里面要写一堆require 所以用 自动加载，指定方法，防止一个项目用了多个框架。（里面放的是一个函数,可以是匿名函数）
spl_autoload_register('\\IMooc\\Loader::autoload');

//
//// 引入了命名空间，怎么调用函数呢，就是要在调用函数的时候加上命名空间。
//IMooc\Object::test();
//App\Controller\Home\Index::test();


//// 栈
//$stack = new SplStack();
//$stack->push('data1');
//$stack->push('data2');
//echo $stack->pop(); // data2
//echo $stack->pop(); // data1
//
//echo '<br>';
//
//// 队列
//$queue = new SplQueue();
//$queue->enqueue('data1');
//$queue->enqueue('data2');
//echo $queue->dequeue();// data1
//echo $queue->dequeue();// data2
//
//echo '<br>';
//
//// 堆 最小堆
//$heap = new SplMinHeap();
//$heap->insert('data1');
//$heap->insert('data2');
//echo $heap->extract();// data1
//echo $heap->extract();// data2
//
//echo '<br>';
//
//// 固定尺寸的数组 不管有没有用元素 定义以后都会分配固定长度的数组
//$array = new SplFixedArray(10);
//$array[0] = 123;
//$array[9] = 1234;
//var_dump($array);
//// { [0]=> int(123) [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> int(1234) }
//
//echo '<br>';
//
//// 链式操作
//$db = new IMooc\Database();
//$db->where('id = 1')->order('id desc')->limit(10);
//
//echo '<br>';
//
//// 四种魔术方法
//$obj = new IMooc\Object();
//$obj->title = 'wahahha';
//echo $obj->title;
//echo '<br>';
//echo $obj;
//echo '<br>';
//$obj->test('hello', 123);
//echo '<br>';
//IMooc\Object::stack('hahahah');
//echo '<br>';
//echo $obj('invoke');

// 工厂 单例 注册树
// $factory = new IMooc\Factory(); // 本身不会new这个工厂 主要是这个工厂里放的是什么类
$factory = IMooc\Factory::createDatabase();

